package com.nixelsolutions.realstate;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Vector;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.jain.addon.resource.DefaultI18NResourceProvider;
import com.jain.addon.resource.I18NProvider;
import com.vaadin.server.FileResource;
import com.vaadin.server.VaadinService;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
import com.nixelsolutions.realstate.Constants;

public class Portada {
	
	// Tools needed
	private static Logger logger = LogManager.getLogger(BestUI.class);
	private static I18NProvider provider = DefaultI18NResourceProvider.instance();
	private static String basepath;
	private static String applicationURL;
	private Locale locale;
	
	private Vector<Inmueble> inmueblesDestacados;
	private Vector<Inmueble> inmueblesNoDestacados;
	private Vector<Cliente> clientesFijos;
	
	private VerticalLayout portada;
	private HorizontalLayout destacados;
	private Label tablePortadaDestacados;
	private Label tablePortadaNoDestacados;
	private Label tableClientesDestacados;
	private String portadaHTML;
	private String imagesPath = "/Users/manel/Dropbox/Nixel/Jordi/casasencastelldefels.es/20130824/new_version/html/almacen/clientes";

	public Portada(Locale locale) {
		this.locale = locale;
		
		basepath = VaadinService.getCurrent().getBaseDirectory().getAbsolutePath();
		applicationURL = provider.getText(this.locale, "application.base.url");

		portada = new VerticalLayout();
		portada.setWidth("80%");
		portada.addStyleName("portada-layout root-centered");
		
		HorizontalLayout sectionTitle = new HorizontalLayout();
		sectionTitle.setSpacing(true);	
		
		destacados = new HorizontalLayout();
		destacados.setSpacing(true);

		Label sectionName = new Label("best.title");
		sectionName.addStyleName("sectionTitle");

		Label titleSeparator = new Label ("<hr>", ContentMode.HTML);
		titleSeparator.addStyleName("portada");
		
		sectionTitle.addComponent(new Embedded("", new FileResource(new File(basepath +"/WEB-INF/images/elecciongrande.gif"))));
		sectionTitle.addComponent(sectionName);		
		
		portada.addComponent(sectionTitle);
		portada.addComponent(titleSeparator);
		portada.addComponent(destacados);
		
		buildPortada();
	}
	
	private void buildPortada() {
		DatabaseHelper database = new DatabaseHelper();
		// Get inmuebles destacados
		inmueblesDestacados = database.getInmuebles(Constants.PORTADA_DESTACADOS);
		getPortadaHTML(Constants.PORTADA_DESTACADOS);
		tablePortadaDestacados = new Label(portadaHTML, ContentMode.HTML);
		tablePortadaDestacados.setStyleName("inmueblesDestacadosFijos");
		destacados.addComponent(tablePortadaDestacados);
		// Get clientes fijos
		clientesFijos = database.getClientes(Constants.ANUNCIANTE_FIJO, null);
		getPortadaHTML(Constants.ANUNCIANTE_FIJO);
		tableClientesDestacados = new Label(portadaHTML, ContentMode.HTML);
		destacados.addComponent(tableClientesDestacados);
		// Get inmuebles no destacados
		inmueblesNoDestacados = database.getInmuebles(Constants.PORTADA_NO_DESTACADOS);
		getPortadaHTML(Constants.PORTADA_NO_DESTACADOS);
		tablePortadaNoDestacados = new Label(portadaHTML, ContentMode.HTML);
		portada.addComponent(tablePortadaNoDestacados);
	}
	
	public VerticalLayout getPortada() {
		return this.portada;
	}
	
	public void setLocale(Locale locale) {
		this.locale = locale;
		// Refresh portada destacados
		getPortadaHTML(Constants.PORTADA_DESTACADOS);
		destacados.removeComponent(tablePortadaDestacados);
		destacados.removeComponent(tableClientesDestacados);
		tablePortadaDestacados = new Label(portadaHTML, ContentMode.HTML);
		tablePortadaDestacados.setStyleName("inmueblesDestacadosFijos");
		destacados.addComponent(tablePortadaDestacados);
		destacados.addComponent(tableClientesDestacados);
		// Refresh portada no destacados
		getPortadaHTML(Constants.PORTADA_NO_DESTACADOS);
		portada.removeComponent(tablePortadaNoDestacados);
		tablePortadaNoDestacados = new Label(portadaHTML, ContentMode.HTML);
		portada.addComponent(tablePortadaNoDestacados);
	}
	
	public void getPortadaHTML(int tipo) {
		Vector<Inmueble> inmuebles = null;
		Vector<Cliente> clientes = null;
		int columns = 0;
		
		switch (tipo) {
		case Constants.PORTADA_DESTACADOS:
			inmuebles = inmueblesDestacados;
			columns = 4;
			
			portadaHTML = "<table align=\"center\" width=\"100%\" border=\"0\" cellpading=\"0\" cellspacing=\"2\" class\"normal-font\"><tbody>";
			for (int i=0; i<inmuebles.size(); i++) {
				if (i%columns == 0) {
					portadaHTML = portadaHTML + "<tr class=\"pequena\">";
				}

				File dir = new File(imagesPath + "/"+inmuebles.elementAt(i).getCliente().getDNI()+"/"+inmuebles.elementAt(i).getReferencia());

				File[] propertyImages = dir.listFiles(new FilenameFilter() {
			        @Override
			        public boolean accept(File dir, String name) {
			            return name.toLowerCase().endsWith(".jpg") || name.toLowerCase().endsWith(".jpeg") || name.toLowerCase().endsWith(".png");
			        }
			    });
				
				portadaHTML = portadaHTML + "<td colspan=\"2\" align=\"center\" valign=\"top\"> <table width=\"100%\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"pequena\">";
				portadaHTML = portadaHTML + "<tbody><tr>";
				portadaHTML = portadaHTML + "<td width=\"23\" height=\"23\"><img src=\"/realstate/VAADIN/themes/realstate/images/1.gif\" width=\"23\" height=\"23\"></td>";
				portadaHTML = portadaHTML + "<td valign=\"bottom\" background=\"/realstate/VAADIN/themes/realstate/images/2.gif\">&nbsp;</td>";
				portadaHTML = portadaHTML + "<td width=\"24\" height=\"23\"><img src=\"/realstate/VAADIN/themes/realstate/images/3.gif\" width=\"23\" height=\"23\"></td></tr>";
				portadaHTML = portadaHTML + "<tr><td background=\"/realstate/VAADIN/themes/realstate/images/8.gif\">&nbsp;</td>";
				portadaHTML = portadaHTML + "<td height=\"135\" align=\"center\" valign=\"top\" bgcolor=\"#FFFFFF\" class=\"arial\">";
				portadaHTML = portadaHTML + "<a href=\""+applicationURL+"/property/?reference="+inmuebles.elementAt(i).getReferencia()+"&lang="+this.locale+"\" target=\""+inmuebles.elementAt(i).getReferencia()+"\">";
				portadaHTML = portadaHTML + "<img width=\"165\" height=\"100\" src=\""+applicationURL+"/img/clientes/"+inmuebles.elementAt(i).getCliente().getDNI()+"/"+inmuebles.elementAt(i).getReferencia()+"/"+propertyImages[propertyImages.length-1].getName()+"\" border=\"0\" title=\"REFERENCIA&nbsp;"+inmuebles.elementAt(i).getReferenciaInterna()+"\"></a>";
				portadaHTML = portadaHTML + "<br>"+provider.getText(this.locale, "property.type."+inmuebles.elementAt(i).getTipo())+"<br>"+provider.getText(this.locale, inmuebles.elementAt(i).getOperation())+"<br>"+inmuebles.elementAt(i).getLocalidad()+"<br>"+inmuebles.elementAt(i).getZona()+"<br><strong>"+NumberFormat.getNumberInstance(locale).format(inmuebles.elementAt(i).getPrecio())+"&nbsp;€ </strong></td>";
				portadaHTML = portadaHTML + "<td background=\"/realstate/VAADIN/themes/realstate/images/4.gif\">&nbsp;</td></tr><tr><td width=\"23\" height=\"24\"><img src=\"/realstate/VAADIN/themes/realstate/images/7.gif\" width=\"23\" height=\"24\"></td><td align=\"center\" valign=\"top\" background=\"/realstate/VAADIN/themes/realstate/images/6.gif\">&nbsp;</td><td width=\"24\" height=\"24\"><img src=\"/realstate/VAADIN/themes/realstate/images/5.gif\" width=\"24\" height=\"24\"></td></tr>";
				if ((i+1)%columns == 0) {
					portadaHTML = portadaHTML + "</tr>";
				}
				portadaHTML = portadaHTML + "</tbody></table>";
			}
			portadaHTML = portadaHTML + "</tr></tbody></table>";
			
			break;
		case Constants.PORTADA_NO_DESTACADOS:
			inmuebles = inmueblesNoDestacados;
			columns = 6;
			
			portadaHTML = "<table align=\"center\" width=\"100%\" border=\"0\" cellpading=\"0\" cellspacing=\"0\" class\"normal-font\"><tbody>";
			portadaHTML = portadaHTML + "<tr><td width=\"23\" height=\"23\"><img src=\"/realstate/VAADIN/themes/realstate/images/1.gif\" width=\"23\" height=\"23\"></td>";
			portadaHTML = portadaHTML + "<td valign=\"bottom\" background=\"/realstate/VAADIN/themes/realstate/images/2.gif\">&nbsp;</td>";
			portadaHTML = portadaHTML + "<td width=\"24\" height=\"23\"><img src=\"/realstate/VAADIN/themes/realstate/images/3.gif\" width=\"23\" height=\"23\"></td></tr>";
            portadaHTML = portadaHTML + "<tr><td background=\"/realstate/VAADIN/themes/realstate/images/8.gif\">&nbsp;</td>";
            portadaHTML = portadaHTML + "<td align=\"center\" bgcolor=\"#FFFFFF\" class=\"arial\">";
            portadaHTML = portadaHTML + "<table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"2\" class=\"normal-font\"><tbody>";
			
			for (int i=0; i<inmuebles.size(); i++) {
				if (i%columns == 0) {
					portadaHTML = portadaHTML + "<tr class=\"pequena\">";
				}
				
				File dir = new File(imagesPath + "/"+inmuebles.elementAt(i).getCliente().getDNI()+"/"+inmuebles.elementAt(i).getReferencia());

				File[] propertyImages = dir.listFiles(new FilenameFilter() {
			        @Override
			        public boolean accept(File dir, String name) {
			            return name.toLowerCase().endsWith(".jpg") || name.toLowerCase().endsWith(".jpeg") || name.toLowerCase().endsWith(".png");
			        }
			    });
				
				portadaHTML = portadaHTML + "<td align=\"center\" valign=\"top\">";
				portadaHTML = portadaHTML + "<a href=\""+applicationURL+"/property/?reference="+inmuebles.elementAt(i).getReferencia()+"&lang="+this.locale+"\" target=\""+inmuebles.elementAt(i).getReferencia()+"\">";
				portadaHTML = portadaHTML + "<img width=\"145\" height=\"90\" src=\""+applicationURL+"/img/clientes/"+inmuebles.elementAt(i).getCliente().getDNI()+"/"+inmuebles.elementAt(i).getReferencia()+"/"+propertyImages[propertyImages.length-1].getName()+"\" border=\"0\" title=\"REFERENCIA&nbsp;"+inmuebles.elementAt(i).getReferenciaInterna()+"\"></a>";
				portadaHTML = portadaHTML + "<br>"+provider.getText(this.locale, "property.type."+inmuebles.elementAt(i).getTipo())+"<br>"+provider.getText(this.locale, inmuebles.elementAt(i).getOperation())+"<br>"+inmuebles.elementAt(i).getLocalidad()+" "+inmuebles.elementAt(i).getZona()+"<br><strong>"+NumberFormat.getNumberInstance(locale).format(inmuebles.elementAt(i).getPrecio())+"&nbsp;€ </strong></td>";
				if ((i+1)%columns == 0) {
					portadaHTML = portadaHTML + "</tr>";
				}
			}
			portadaHTML = portadaHTML + "</tbody></table>";
			portadaHTML = portadaHTML + "</td><td background=\"/realstate/VAADIN/themes/realstate/images/4.gif\">&nbsp;</td></tr>";
			portadaHTML = portadaHTML + "<td width=\"23\" height=\"24\"><img src=\"/realstate/VAADIN/themes/realstate/images/7.gif\" width=\"23\" height=\"24\"></td>";
			portadaHTML = portadaHTML + "<td align=\"center\" valign=\"top\" background=\"/realstate/VAADIN/themes/realstate/images/6.gif\">&nbsp;</td>";
			portadaHTML = portadaHTML + "<td width=\"24\" height=\"24\"><img src=\"/realstate/VAADIN/themes/realstate/images/5.gif\" width=\"24\" height=\"24\"></td>";
			portadaHTML = portadaHTML + "</tr></tbody></table>";
				
			break;
		case Constants.ANUNCIANTE_FIJO:
			clientes = clientesFijos;
			columns = 1;
			
			portadaHTML = "<table align=\"center\" width=\"100%\" border=\"0\" cellpading=\"2\" cellspacing=\"2\" class\"normal-font\"><tbody>";
			for (int i=0; i<clientes.size(); i++) {
				if (i%columns == 0) {
					portadaHTML = portadaHTML + "<tr class=\"pequena\">";
				}

				portadaHTML = portadaHTML + "<td align=\"center\" valign=\"top\">";
				portadaHTML = portadaHTML + "<a href=\""+applicationURL+"/search/?client="+clientes.elementAt(i).getDNI()+"&lang="+this.locale+"\">";
				portadaHTML = portadaHTML + "<img width=\"110\" src=\""+applicationURL+"/img/Logos/"+clientes.elementAt(i).getLogo()+"\" border=\"0\" title=\""+clientes.elementAt(i).getName()+"\"></a></td>";
				if ((i+1)%columns == 0) {
					portadaHTML = portadaHTML + "</tr>";
				}
			}
			portadaHTML = portadaHTML + "</tbody></table>";
			
			break;
		}
	}
}
